#coding=utf-8
#测试用例标题：朵云登录、注册接口自动化测试
#测试场景：各种登录、注册情况接口测试
#创建者：陈强
#创建日期：2019/03/29

import requests
import unittest
import datetime,os
import do_execl
import Test_report
from TestWeb import register

#定义访问地址
base_url = 'http://community-platform-api-test.gdgyun.com'
article_url = 'http://community-article-api-test.gdgyun.com'
s = requests.session()
class Login(unittest.TestCase):


    def setUp(self):
        os.chdir('D:\\python-photo\\log')  # 切换到当前目录
        report = open("login.txt", "a")  # 打开报告
        current_time = datetime.datetime.now()
        report.write("\n%s:" % current_time)
        report.write("^^^^^^^^^^^^^^^^^^^^^开始登录接口自动化测试^^^^^^^^^^^^^^^^^^^^^\n")

    def write_result(self,result):
        os.chdir('D:\\python-photo\\log')  # 切换到当前目录
        report = open("login.txt", "a")  # 打开报告
        current_time = datetime.datetime.now()
        report.write("%s:" % current_time)
        report.write(result + "\n")

    def login(self,mobile,password):
        self.mobile = mobile
        self.password = password
        checkmobile = s.get(base_url+'/api/community/account/check/mobile?mobile='+mobile)
        login_data = ({"mobile": mobile, "encryptedPassword": password})
        login = s.post(base_url+'/api/community/account/login', json=login_data)
        checkmobile_msg = checkmobile.json()["msg"]
        login_msg = login.json()["msg"]
        return checkmobile_msg,login_msg

    def Register(self,mobile,password,authCode):
        self.mobile = mobile
        checkmobile = s.get(base_url + '/api/community/account/check/mobile?mobile=' + str(mobile))
        checkmobile_msg = checkmobile.json()["msg"]
        list = register.password(str(mobile),password)
        self.password = list[0]
        code = list[1]
        salt = list[2]
        msg = list[3]
        register_data = (
        {"mobile": str(mobile), "encryptedPassword": self.password, "verificationCode": code, 'salt': salt,
         'authCode': authCode})
        register_post = s.post(base_url + '/api/community/account/activate?version=2',json=register_data)
        register_msg = register_post.json()["msg"]
        return checkmobile_msg,msg,register_msg

    def test_register(self):
        # 从Excel函数中取得手机号、密码、预期结果
        nrows = do_execl.handler_excel(1)[1]
        mobile = long(do_execl.handler_excel(1)[0][0].values()[1])
        startMobile = mobile  # 定义为初始号码
        for i in range(0, int(nrows)-1):
            mobile = long(do_execl.handler_excel(1)[0][i].values()[1])
            password = do_execl.handler_excel(1)[0][i].values()[2]
            expected = do_execl.handler_excel(1)[0][i].values()[0]
            authCode = do_execl.handler_excel(1)[0][i].values()[3]
            #执行注册
            do_register = self.Register(str(mobile),password,authCode)
            newMobile = mobile + 1
            do_execl.write_phone_excel(newMobile, i + 2)
            if expected == do_register[0] + '，' + do_register[1] + '，' + do_register[2]:
                do_execl.write_excel(do_register[0] + '，' + do_register[1] + '，' + do_register[2], 'PASS', i+1, 1)
            else:
                do_execl.write_excel(do_register[0] + '，' + do_register[1] + '，' + do_register[2], 'FAIL', i + 1, 1)
            self.write_result('账号为：' + str(mobile) + '，' + do_register[0] + '，' + do_register[1] + '，' + do_register[2])  # 写入运行日志
        finalMbolie = startMobile + int(nrows) - 1   #写入更新后的号码
        do_execl.write_phone_excel(finalMbolie,1)



    def test_login(self):
        #从Excel函数中取得手机号、密码、预期结果
        nrows = do_execl.handler_excel(0)[1]
        for i in range(0,int(nrows)-1):
            mobile = do_execl.handler_excel(0)[0][i].values()[1]
            password = do_execl.handler_excel(0)[0][i].values()[2]
            expected = do_execl.handler_excel(0)[0][i].values()[0]
            #执行登录
            do_login = self.login(str(mobile),password)
            #对登录后的结果进行判断并写入Excel中
            if expected == do_login[0] + '，' + do_login[1]:
                do_execl.write_excel(do_login[0] + '，' + do_login[1],'PASS',i+1,0)
            else:
                do_execl.write_excel(do_login[0] + '，' + do_login[1],'FAIL',i+1,0)
            self.write_result('账号为：' + str(mobile) + '，' + '密码为：' + str(password) + '，' +do_login[0] + '，' + do_login[1])  #写入运行日志

    def tearDown(self):
        self.tearDownClass()


if __name__ == "__main__":
    testunit = unittest.TestSuite()
    loader = unittest.TestLoader()
    testunit.addTest(loader.loadTestsFromTestCase(Login))
    report = Test_report.report().write_report('login', testunit)  # 以login命名生成测试报告